/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.clienterestful;

import com.clienterestful.beans.Calendario;
import com.clienterestful.beans.Persona;
import com.clienterestful.beans.Cita;
import com.clienterestful.bo.CalendarioBO;
import com.clienterestful.bo.CitaBO;
import com.clienterestful.bo.PersonaBO;
import com.clienterestful.util.Leer;
import com.sun.jersey.api.client.UniformInterfaceException;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;


public class ClienteRESTFul {
    private CalendarioBO cCalendario;
    private CitaBO       cCita;
    private PersonaBO    cPersona;
    
    public ClienteRESTFul(){
        this.cCita=new CitaBO();
        this.cPersona=new PersonaBO();
        this.cCalendario=new CalendarioBO();
        menu();
    }
    
    public  void menu(){
        int op=0;
        do{
            System.out.println(" --------------- Menu ------------ ");
            System.out.println(" 1.  Ingresar usuario");
            System.out.println(" 2.  Ingresar calendario");
            System.out.println(" 3.  Ingresar cita al calendario");
            System.out.println(" 4.  Modificar usuario");
            System.out.println(" 5.  Modificar Calendario");
            System.out.println(" 6.  Modificar cita al calendario");
            System.out.println(" 7.  Eliminar calendario");
            System.out.println(" 8.  Listar todos los usuario");
            System.out.println(" 9.  Listar todas las citas del calendario");
            System.out.println(" 10. Listar todas las citas de todos los calendarios de un usuario");
            System.out.println(" 11. Listar todos los calendarios Publicos");
            System.out.println(" 12. Listar todos los calendarios del Usuario");
            System.out.println(" 0. Salir ");
            System.out.print("Ingrese Opcion: ");
            op=Leer.datoInt();
            
            switch(op){
                case 1: this.addUsuario();break;
                case 2: this.addCalendario();break;
                case 3: this.addCita();break;
                case 4: this.updateUsuario();break;
                case 5: this.updateCalendario();break;
                case 6: this.updateCita();break;
                case 7: this.deleteCalendario();break;
                case 8: this.listarAllUsuarios();break;
                case 9: this.listarAllCitasCalendario();break;
                case 10: this.listarAllCitasCalendarioUsuario();break;
                case 11: this.listarAllCalendariosPublicos();break;
                case 12: this.listarALLCalendariosPersona();break;
            }
        }
        while(op!=0);
    }
    public void addUsuario(){
        Persona persona=new Persona();
        String nombre,ap_paterno,ap_materno, correo, password, usuarioXML;
        System.out.println("Ingrese los datos del usuario");
        System.out.print("Nombre: ");
        nombre=Leer.dato();
        System.out.print("Apellido Paterno: ");
        ap_paterno=Leer.dato();
        System.out.print("Apellido Materno: ");
        ap_materno=Leer.dato();
        System.out.print("correo: ");
        correo=Leer.dato();
        System.out.print("contraseña: ");
        password=Leer.dato();     
        
        persona.setNombre(nombre);
        persona.setApPaterno(ap_paterno);
        persona.setApMaterno(ap_materno);
        persona.setCorreo(correo);
        persona.setPassword(password);
        /*usuarioXML=Utilidades.getPersonaXML(nombre, ap_paterno, ap_materno, 
                                            correo, password);
        */
        try{
            this.cPersona.addPersonaXML(persona);
            System.out.println("Usuario Creado correctamente ...");
        }catch(UniformInterfaceException e){
            System.out.println("Error al Crear el usuario.."+e.getMessage());
        }
        
    }
    public void addCalendario(){
        int idPersona;
        String nomCalendario;
        String publico;
        Date fechCreacion;
        Calendario calendario=new Calendario();
        Persona    persona   = new Persona();
        System.out.println("Ingrese los datos del Calendario");
        System.out.print("Ingrese el codigo del usuario:");
        idPersona=Leer.datoInt();
        System.out.print("Ingrese nombre Calendario: ");
        nomCalendario=Leer.dato();
        System.out.print("Quiere que sea Publico (true/false):");
        publico=Leer.dato();
        System.out.print("Fecha de Creacion(dd/mm/yyyy):");
        fechCreacion=Leer.datoFecha();
        //asigamos el id de la persona 
        persona.setIdpersona(idPersona);
        calendario.setNombre(nomCalendario);
        calendario.setPersona(persona);
        calendario.setPublico(Boolean.valueOf(publico));        
        calendario.setFechaCreacion(fechCreacion);
        
        try{
            this.cCalendario.addCalendarioXML(calendario);
            System.out.println("Calendario Creado correctamente ...");
        }
        catch(UniformInterfaceException e){
             System.out.println("Error al Crear el calendario.."+e.getMessage());
        }        
    }
    public void addCita(){
        Calendario calendario=new Calendario();
        Cita       cita      = new Cita();
        int idCalendario;
        String descripcion;
        Date fechaI, fechaF;
                
        System.out.println("Ingrese los datos de la Cita");
        System.out.print("Ingrese el codigo del Calendario: ");
        idCalendario=Leer.datoInt();
        System.out.print("Ingrese la descripcion: ");
        descripcion=Leer.dato();
        System.out.print("Fecha de inicio (dd/mm/yyyy): ");
        fechaI=Leer.datoFecha();
        System.out.print("Fecha de Fin (dd/mm/yyyy): ");
        fechaF=Leer.datoFecha();     
        
        calendario.setIdcalendario(Integer.valueOf(idCalendario));
        cita.setIdcalendario(calendario);
        cita.setDescripcion(descripcion);
        cita.setFechainicio(fechaI);
        cita.setFechafin(fechaF);
        
        try{
            this.cCita.addCitaXML(cita);
            System.out.println("Cita Creada correctamente ...");
        }
        catch(UniformInterfaceException e){
             System.out.println("Error al Crear la cita.."+e.getMessage());
        } 
    }
    public void updateUsuario(){
        Persona persona=new Persona();
        int idPersona;
        String nombre,ap_paterno,ap_materno, correo, password, usuarioXML;
        System.out.println("Ingrese los datos del usuario a modificar");
        System.out.print("idUsuario a modificar: ");
        idPersona=Leer.datoInt();
        System.out.print("Nombre: ");
        nombre=Leer.dato();
        System.out.print("Apellido Paterno: ");
        ap_paterno=Leer.dato();
        System.out.print("Apellido Materno: ");
        ap_materno=Leer.dato();
        System.out.print("correo: ");
        correo=Leer.dato();
        System.out.print("contraseña: ");
        password=Leer.dato();     
        
        persona.setIdpersona(idPersona);
        persona.setNombre(nombre);
        persona.setApPaterno(ap_paterno);
        persona.setApMaterno(ap_materno);
        persona.setCorreo(correo);
        persona.setPassword(password);
        /*usuarioXML=Utilidades.getPersonaXML(nombre, ap_paterno, ap_materno, 
                                            correo, password);
        */
        try{
            this.cPersona.editPersonaXML(persona);
            System.out.println("Usuario modificado correctamente ...");
        }catch(UniformInterfaceException e){
            System.out.println("Error al modificar el usuario.."+e.getMessage());
        }
    }
    public void updateCalendario(){
        int idPersona;
        int idCalendario;
        String nomCalendario;
        String publico;
        //String fechCreacion;
        Calendario calendario=new Calendario();
        Persona    persona   = new Persona();
        System.out.println("Ingrese los datos a modificar del Calendario");
        System.out.print("Ingrese el codigo del calendario a modificar:");
        idCalendario=Leer.datoInt();
        System.out.print("Ingrese codigo del usuario:");
        idPersona=Leer.datoInt();
        System.out.print("Ingrese nombre Calendario:");
        nomCalendario=Leer.dato();        
        System.out.print("Quiere que sea Publico (true/false):");
        publico=Leer.dato();
        //asigamos el id de la persona 
        persona.setIdpersona(idPersona);
        calendario.setIdcalendario(idCalendario);
        calendario.setNombre(nomCalendario);
        calendario.setPersona(persona);
        calendario.setPublico(Boolean.valueOf(publico));
        //calendario.setFechaCreacion(fechCreacion);
        
        try{
            this.cCalendario.editCalendarioXML(calendario);
            System.out.println("Calendario Modificado correctamente ...");
        }
        catch(UniformInterfaceException e){
             System.out.println("Error al modificr el calendario.."+e.getMessage());
        }
    }
    public void updateCita(){
        Calendario calendario=new Calendario();
        Cita       cita      = new Cita();
        int idCalendario;
        String descripcion;
        Date fechaI, fechaF;
                
        System.out.println("Ingrese los datos a modificar de la Cita");
        System.out.print("Ingrese el codigo del Calendario");
        idCalendario=Leer.datoInt();
        System.out.print("Ingrese la descripcion");
        descripcion=Leer.dato();
        System.out.print("Fecha de inicio (dd/mm/yyyy): ");
        fechaI=Leer.datoFecha();
        System.out.print("Fecha de Fin (dd/mm/yyyy): ");
        fechaF=Leer.datoFecha();     
        
        calendario.setIdcalendario(idCalendario);
        cita.setIdcalendario(calendario);
        cita.setDescripcion(descripcion);
        cita.setFechafin(fechaF);
        cita.setFechainicio(fechaI);
        
        try{
            this.cCita.addCitaXML(cita);
            System.out.println("Cita modificada correctamente ...");
        }
        catch(UniformInterfaceException e){
             System.out.println("Error al modificar la cita.."+e.getMessage());
        } 
    }
    public void deleteCalendario(){
        String idCalendario;
        String pregunta;
        System.out.println("Ingrese el codigo del celendarios a eleminar");
        System.out.print("codigo de calendario: ");
        idCalendario=Leer.dato();
        System.out.println();
        System.out.print("Seguro que desea eliminar el calendario S/N: ");
        pregunta=Leer.dato();
        if(pregunta.equals("SI")||pregunta.equals("Si")||pregunta.equals("si")){
            try{
                this.cCalendario.deleteCalendario(idCalendario);
                System.out.println("Calendario borrado correctamente ...");
            }
            catch(UniformInterfaceException e){
                 System.out.println("Error al borrar calendario..."+e.getMessage());
            } 
        }
    }
    public void listarAllUsuarios(){
        System.out.println((this.cPersona.findAllPersonasXML(String.class)).replaceAll("><", ">\n<"));
    }
    public void listarAllCitasCalendario(){
         System.out.println((this.cCita.findAllCitasXML(String.class)).replaceAll("><", ">\n<"));
    
    }
    public void listarAllCitasCalendarioUsuario(){
        String idPersona;
        System.out.println("Ingrese el Id Persona, para obtener todas sus sus citas");
        System.out.print("Id Persona: ");
        idPersona=Leer.dato();
        try{
            System.out.println((this.cPersona.findByCitaPersonaXML(String.class,idPersona, 
                                        null, null, null, null)).replaceAll("><", ">\n<"));
        }
        catch(UniformInterfaceException e){
                 System.out.println("Error al al consultar todas las citas.."+e.getMessage());
        } 
    
    }
    public void listarAllCalendariosPublicos(){
        System.out.println((this.cCalendario.findAllCalendariosPublicosXML(String.class)).replaceAll("><", ">\n<"));
    }
    
    public void listarALLCalendariosPersona(){
        String idPersona;
        System.out.println("Ingrese el Id Persona, para obtener todos sus calendarios");
        System.out.print("Id Persona: ");
        idPersona=Leer.dato();
        try{
            System.out.println((this.cPersona.findCalendariosPersonaXML(String.class,idPersona)).replaceAll("><", ">\n<"));
        }
        catch(UniformInterfaceException e){
                 System.out.println("Error al al consultar todas las citas.."+e.getMessage());
        } 
    }
    public static void main(String[] args) {
        ClienteRESTFul clienteRest= new ClienteRESTFul();
    }
    
}
